<?php
session_start();

require_once 'app/funciones.php';
require_once 'app/Model.php';
require_once 'app/api.php';;
comprobarIdioma();

// Incluye automáticamente los controladores que sean necesarios
function __autoload($nombre_clase) {
    require_once 'app/' . $nombre_clase . '.php';
}



// enrutamiento. Selecciona el controlador y la acción a ejecutar
$map = array(
    'inicio' => array('controller' => 'controlador_usuarios', 'action' => 'inicio', 'privada' => false),
    'registro' => array('controller' => 'controlador_usuarios', 'action' => 'registrar', 'privada' => false),
    'login' => array('controller' => 'controlador_usuarios', 'action' => 'login', 'privada' => false),
    'recuperar_clave' => array('controller' => 'controlador_usuarios', 'action' => 'recuperar_clave', 'privada' => false),
    'activar' => array('controller' => 'controlador_usuarios', 'action' => 'activar', 'privada' => false),
    'contacto' => array('controller' => 'controlador_publico', 'action' => 'contacto', 'privada' => false),
    'preguntas_frecuentes' => array('controller' => 'controlador_publico', 'action' => 'preguntas_frecuentes', 'privada' => false),
    'sobre_nosotros' => array('controller' => 'controlador_publico', 'action' => 'sobre_nosotros', 'privada' => false),
    'trabaja_nosotros' => array('controller' => 'controlador_publico', 'action' => 'trabaja_nosotros', 'privada' => false),
    'que_es_betporra' => array('controller' => 'controlador_publico', 'action' => 'que_es_betporra', 'privada' => false),
    'info_regalos' => array('controller' => 'controlador_regalos', 'action' => 'regalos_public', 'privada' => false),
    'info_competiciones' => array('controller' => 'controlador_competiciones', 'action' => 'competiciones_public', 'privada' => false),
    'regalos' => array('controller' => 'controlador_regalos', 'action' => 'ver_regalos', 'privada' => true),
    'regalo' => array('controller' => 'controlador_regalos', 'action' => 'ver_regalo', 'privada' => true),
    'solicitar_regalo' => array('controller' => 'controlador_regalos', 'action' => 'solicitar_regalo', 'privada' => true),
    'competiciones' => array('controller' => 'controlador_competiciones', 'action' => 'ver_competiciones', 'privada' => true),
    'tablon' => array('controller' => 'controlador_porras', 'action' => 'ver_porras', 'privada' => true),
    'ver_porrass' => array('controller' => 'controlador_porras', 'action' => 'ver_porrass', 'privada' => true),
    'apostar' => array('controller' => 'controlador_pronosticos', 'action' => 'apostar', 'privada' => true),
    'mis_apuestas' => array('controller' => 'controlador_pronosticos', 'action' => 'ver_mis_apuestas', 'privada' => true),
    'mis_regalos' => array('controller' => 'controlador_usuarios', 'action' => 'mis_regalos', 'privada' => true),
    'perfil' => array('controller' => 'controlador_usuarios', 'action' => 'perfil', 'privada' => true),
    'modificar_imagen' => array('controller' => 'controlador_usuarios', 'action' => 'modificar_imagen', 'privada' => true),
    'modificar_clave' => array('controller' => 'controlador_usuarios', 'action' => 'cambiar_clave', 'privada' => true),
    'modificar_perfil' => array('controller' => 'controlador_usuarios', 'action' => 'editar', 'privada' => true),
    'logout' => array('controller' => 'controlador_usuarios', 'action' => 'logout', 'privada' => true),
    'comprobacion_email_existente' => array('controller' => 'controlador_usuarios', 'action' => 'comprobacion_email_existente', 'privada' => false),
    'comprobacion_nombre_usuario_existente' => array('controller' => 'controlador_usuarios', 'action' => 'comprobacion_nombre_usuario_existente', 'privada' => false),
    'lenguaje' => array('controller' => 'controlador_publico', 'action' => 'cambiar_lenguaje', 'privada' => false)
    
);

//Comprobamos si hay alguna accion que ejecutar, sino vamos a inicio
if (isset($_GET['action'])) {
    //Comprobamos que la acción existe en el mapa del enrutamiento, sino mostramos error 404
    if (isset($map[$_GET['action']])) {
        $action = $_GET['action'];
    } else {
        header('Status: 404 Not Found');
        require 'app/views/error404.php';
        die();
        
        
        //echo '<html><body><h1>Error 404: No existe la ruta " ' . $_GET['action'] . ' ". </h1></body></html>';
        //exit;
    }
} else {
    $action = 'inicio';
}

// Comprobamos si el usuario esta logeado y si la página es privada
if ($map[$action]['privada']) {
    //Si no existe la variable de sesión ni la cookie y no estamos ya en inicio redirigimos a inicio
    if (!isset($_SESSION['betporra_usuario']) && !isset($_COOKIE['betporra_usuario']) && $action != 'inicio') {
        header('location:../inicio');
        die();
    }

    //Si existe la cookie pero no la sesión, creamos la sesión
    if (!isset($_SESSION['betporra_usuario']) && isset($_COOKIE['betporra_usuario'])) {
        //compruebo si la cookie coincide con algón usuario
        $obj_usuario = new Usuario();
        if ($email_usuario = $obj_usuario->comprobar_cookie($_COOKIE['betporra_usuario'])) {
            //Creo la sesión
            $_SESSION['betporra_usuario'] = $email_usuario;
            $obj_usuario->get($email_usuario);
            $_SESSION['betporra_nombre'] = $obj_usuario->usuario;
            $_SESSION['betporra_avatar'] = $obj_usuario->imagen;
        }
    }
}

//Si estamos en inicio y ya estamos logueados (existe la sesión) redirigimos a listar contactos
if ($action == 'inicio' && isset($_SESSION['betporra_usuario'])) {
    header('location:competiciones');
    die();
}

// La variable controlador contiene la clase del controlador a ejecutar y el método de dicha clase.
$controlador = $map [$action];

// Guardamos en variables el nombre de la clase controladora y del método que queremos ejecutar dentro de dicha clase
$clase_controlador = $controlador ['controller'];
$metodo = $controlador ['action'];

// Creamos un objeto de la clase controladora y ejecutamos el método indicado en el action
$obj_controlador = new $clase_controlador ();
$obj_controlador->$metodo();
?>